AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-41590

Muflix's questions

Martin Hope
Muflix
Asked: 2022-10-19 13:33:41 +0800 CST

O acesso cruzado ao banco de dados com confiável não funciona para conta de serviço nem com certificado

  • 7

eu tenho essa configuração

insira a descrição da imagem aqui

  • Criei dois bancos de dados (origem e destino).
  • O banco de dados de origem possui um procedimento armazenado que está acessando a tabela no banco de dados de destino.
  • O procedimento armazenado é executado como conta de serviço
  • O login da conta de serviço tem conta de usuário em ambos os bancos de dados
  • A conta de serviço tem permissão de conexão e autenticação ao banco de dados de destino
  • A conta de serviço tem permissão de leitura no esquema de banco de dados de destino
  • Ambos os bancos de dados têm confiança em

mesmo assim deu erro

O principal do servidor "ServiceAccount" não pode acessar o banco de dados "TargetDatabase" no contexto de segurança atual.

script SQL

-- Create logins
CREATE LOGIN SourceDatabaseOwner    WITH PASSWORD = 'Pa$$w0rd'  
CREATE LOGIN TargetDatabaseOwner    WITH PASSWORD = 'Pa$$w0rd'  
CREATE LOGIN ServiceAccount         WITH PASSWORD = 'Pa$$w0rd'  

-- Create databases
CREATE DATABASE SourceDatabase
CREATE DATABASE TargetDatabase

-- Setup trustworthy
ALTER DATABASE SourceDatabase SET TRUSTWORTHY ON;
ALTER DATABASE TargetDatabase SET TRUSTWORTHY ON;

-- Setup database owners
USE SourceDatabase
GO
EXEC dbo.sp_changedbowner @loginame = N'SourceDatabaseOwner'

USE TargetDatabase
GO
EXEC dbo.sp_changedbowner @loginame = N'TargetDatabaseOwner'

-- Add ServiceAccount to source database
USE SourceDatabase
GO
CREATE USER ServiceAccount FOR LOGIN ServiceAccount;  

-- Add ServiceAccount to target database
USE TargetDatabase
GO
CREATE USER ServiceAccount FOR LOGIN ServiceAccount;  

-- Enable ServiceAccount to authenticate to target database
USE TargetDatabase
GO
GRANT AUTHENTICATE TO ServiceAccount;

-- Grant permissions
USE TargetDatabase
GO
GRANT SELECT ON SCHEMA::dbo TO ServiceAccount

-- Create table with data
USE TargetDatabase
GO
create table dbo.InterestingData (Id int identity primary key, Content nvarchar(255))
insert into dbo.InterestingData (Content) values ('Foo'), ('Bar')

-- Create stored procedure executing under service account and accessing target database
USE SourceDatabase
GO
create or alter procedure dbo.GetData
with execute as 'ServiceAccount' as
begin
    select id, content from TargetDatabase.dbo.InterestingData
end

-- Execution does not work under service account
-- The server principal "ServiceAccount" is not able to access the database "TargetDatabase" under the current security context.
exec dbo.GetData

Então continuei e tentei assinar o procedimento com o certificado e configurar permissões na tabela de destino para o login desse certificado

-- create certificate in master
use master 
go

CREATE CERTIFICATE SignProcedureCert
ENCRYPTION BY PASSWORD = 'Pa$$w0rd'
WITH SUBJECT = 'Certificate for signing stored procedures'
GO

-- backup certificate
BACKUP CERTIFICATE SignProcedureCert TO FILE ='C:\Certs\SignProcedureCert.cer'
WITH PRIVATE KEY
(       
    FILE = 'C:\Certs\SignProcedureCert.pvk',
    DECRYPTION BY PASSWORD = 'Pa$$w0rd',
    ENCRYPTION BY PASSWORD = 'Pa$$w0rd'
)
GO

-- create login from the certificate
create login SignProcedureLogin from certificate SignProcedureCert

-- Import certificate to the source database
CREATE CERTIFICATE SignProcedureCert
FROM FILE = 'C:\Certs\SignProcedureCert.cer'
WITH PRIVATE KEY (FILE = 'C:\Certs\SignProcedureCert.pvk', 
ENCRYPTION BY PASSWORD = 'Pa$$w0rd', 
DECRYPTION BY PASSWORD = 'Pa$$w0rd')

-- Sign the procedure
ADD SIGNATURE TO dbo.GetData   
   BY CERTIFICATE SignProcedureCert  
    WITH PASSWORD = 'Pa$$w0rd';  
GO  

-- Setup permission for SignProcedureLogin to target database
USE TargetDatabase
GO
CREATE USER SignProcedureLogin FOR LOGIN SignProcedureLogin;  
GRANT SELECT ON SCHEMA::dbo TO SignProcedureLogin

então agora eu deveria ter essa configuração

insira a descrição da imagem aqui

mas quando eu executo

USE SourceDatabase
GO
exec dbo.GetData

eu tenho o mesmo erro

O principal do servidor "ServiceAccount" não pode acessar o banco de dados "TargetDatabase" no contexto de segurança atual.

o que estou perdendo?

Atualizar

Quando eu removo a with execute ascláusula, ela funciona

-- Setup trustworthy
ALTER DATABASE SourceDatabase SET TRUSTWORTHY OFF;
ALTER DATABASE TargetDatabase SET TRUSTWORTHY OFF;

USE SourceDatabase
GO

create or alter procedure dbo.GetData
--with execute as 'ServiceAccount' 
as
begin
    select id, content from TargetDatabase.dbo.InterestingData
end

GRANT EXECUTE ON SCHEMA::dbo TO ServiceAccount

execute as login = 'ServiceAccount'
exec dbo.GetData
revert

mas ainda é possível executar de alguma forma o procedimento com a with execute ascláusula?

sql-server
  • 1 respostas
  • 73 Views
Martin Hope
Muflix
Asked: 2022-10-17 08:31:23 +0800 CST

Como registrar o assembly CLR como confiável na implantação do SSDT

  • 8

Eu tenho o assembly CLR no SSDT e para implantar isso ele tem que ser confiável. Pelo que entendi, existem 4 opções de como fazer isso

Primeira opção, use TRUSTWORTHY

EXEC sp_configure 'clr enabled', 1;  
RECONFIGURE;  
  
ALTER DATABASE SourceDatabase SET TRUSTWORTHY ON;

Segunda opção, desative a segurança estrita

EXEC sp_configure 'clr enabled', 1;  
RECONFIGURE;  
  
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;

EXEC sp_configure 'clr strict security', 0;
RECONFIGURE;

Terceira opção, assine a montagem com chave ou certificado

Seems complicated and I was not able to manage that yet. I will appreciate the instructions, because the workflow is not clear here.

Quarta opção, usesp_add_trusted_assembly

EXEC sp_configure 'clr enabled', 1;  
RECONFIGURE;

declare @assembly varbinary(max) = 0x4D5A90000300000004000000FFFF0000... -- I have to manually copy that from the failed SQL publish file.

declare @hash varbinary(64) = HASHBYTES('SHA2_512', @assembly);

EXEC sys.sp_add_trusted_assembly @hash, N'Foo Assembly';

Na 4ª opção tenho que cadastrar manualmente o assembly como confiável e só depois disso posso publicar o assembly. É possível automatizar de alguma forma esse processo?

Estou pensando em criar pre-deployment scriptque possa rodar o código da 4ª opção mas não sei como preencher a variável @assembly do arquivo do assembly .dll.

Como alternativa, se for possível implantar o assembly como não confiável, posso torná-lo confiável no servidor com o seguinte código ( post-deployment script)

-- Register all database assemblies as trusted
declare @name nvarchar(4000),
@content varbinary(max);

DECLARE appCursor CURSOR FAST_FORWARD FOR
    SELECT [name], content
    FROM   SourceDatabase.sys.assembly_files
 
OPEN appCursor
FETCH NEXT FROM appCursor INTO @name, @content
 
WHILE @@FETCH_STATUS = 0
BEGIN
   
   DECLARE @hash varbinary(64) = HASHBYTES('SHA2_512', @content);

    EXEC sys.sp_add_trusted_assembly @hash, @name;

   FETCH NEXT FROM appCursor INTO @name, @content
END
CLOSE appCursor
DEALLOCATE appCursor
GO

Alguma ideia ou qual é a sua abordagem?

sql-server-2017
  • 1 respostas
  • 241 Views
Martin Hope
Muflix
Asked: 2022-10-01 04:16:03 +0800 CST

sys.dm_exec_describe_first_result_set retorna o tipo de dados incorreto

  • 3

Eu tenho dois SQL Servers 2016 conectados ao Linked Server. Quando eu consulto sys.dm_exec_describe_first_result_setdo servidor remoto, ele retorna o tipo de dados numérico para a tabela de colunas em vez de decimal.

Primeira consulta (executada do servidor remoto)

select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from LinkedServerFoo.DatabaseFoo.dbo.TargetTable', NULL, 0) [source]

Segunda consulta (executada do sql server)

select * from sys.dm_exec_describe_first_result_set (N'select top 1 * from DatabaseFoo.dbo.TargetTable', NULL, 0) [source]

Resultado

insira a descrição da imagem aqui

Isso é um problema para mim, pois comparo os tipos de dados com base na saída dessas consultas.

Alguma ideia do que pode ser um problema, por que isso acontece e como pode ser resolvido?

  • Há também o mesmo problema com smalldatetimeonde a tabela sys retorna incorretamentedatetime
t-sql sql-server-2016
  • 1 respostas
  • 68 Views
Martin Hope
Muflix
Asked: 2022-09-28 06:11:38 +0800 CST

A opção Confiável deve ser desabilitada, mas qual é uma alternativa?

  • 6
Esta pergunta foi migrada do Stack Overflow porque pode ser respondida no Database Administrators Stack Exchange. Migrado no mês passado .

Eu executo o relatório de avaliação de vulnerabilidade no SQL Server 2016 e recebi este problema

VA1102 O bit confiável deve ser desabilitado em todos os bancos de dados, exceto MSDB

O motivo de configurar Trustworthy para ON no meu caso é que o DB Owner do banco de dados precisa ter acesso a um banco de dados diferente para leitura de dados (especificamente o procedimento armazenado é executado como proprietário e lê os dados de outro banco de dados).

Minha pergunta é como conseguir o mesmo sem configurar confiável para o que pode expor o servidor a vulnerabilidades?

sql-server
  • 1 respostas
  • 87 Views
Martin Hope
Muflix
Asked: 2019-08-21 01:24:50 +0800 CST

declare a variável da tabela dentro da função

  • 0

No meu procedimento armazenado, tenho variável de tabela com muitas colunas. Porque eu quero simplificar o procedimento armazenado, pensei que poderia declarar a variável da tabela em uma função como

CREATE FUNCTION [dbo].[ufn_DeclareMaterialTableVariable]
(
)
RETURNS @returntable TABLE
(
    [Id] [int] NULL,
    [Number] [int] NOT NULL,
    [Name] [nvarchar](255) NULL,
    ... dozens of columns
)
AS
BEGIN
    RETURN
END

mas percebi que não sei, como usá-lo. Minha ideia era algo como

select * 
into @table
from [dbo].[ufn_DeclareMaterialTableVariable]

mas isso não vai funcionar, a menos que eu use uma tabela temporária.

A segunda ideia é declarar a tabela com o tipo de dados personalizado.

declare @table TABLE as CustomTableType

mas isso também não está funcionando. Qualquer ideia ?

sql-server t-sql
  • 1 respostas
  • 1958 Views
Martin Hope
Muflix
Asked: 2016-12-18 10:06:40 +0800 CST

Colunas não dinâmicas com base na seleção

  • 2

É possível fazer a operação Unpivot, onde os nomes das colunas são feitos via select, sem usar SQL dinâmico?

Eu tentei isso, mas ele falha.

SELECT *
FROM [dbo].[Report]
UNPIVOT
(
  Value
  FOR WeekName IN 
  (
      SELECT COLUMN_NAME FROM information_schema.columns c
      WHERE c.TABLE_NAME = 'Report'
      AND ORDINAL_POSITION > 1
      ORDER BY ORDINAL_POSITION
  )
) u
sql-server-2008 unpivot
  • 1 respostas
  • 805 Views
Martin Hope
Muflix
Asked: 2016-07-20 03:32:29 +0800 CST

SQLCMD não está funcionando no script de pré-implantação no projeto sql

  • 0

Eu tenho um projeto sql no visual studio e criei um script de pré-implantação

/*
 Pre-Deployment Script Template                         
--------------------------------------------------------------------------------------
 This file contains SQL statements that will be executed before the build script.   
 Use SQLCMD syntax to include a file in the pre-deployment script.          
 Example:      :r .\myfile.sql                              
 Use SQLCMD syntax to reference a variable in the pre-deployment script.        
 Example:      :setvar TableName MyTable                            
               SELECT * FROM [$(TableName)]                 
--------------------------------------------------------------------------------------
*/

:setvar TableName MyTable                           
SELECT * FROM [$(TableName)]    

mas estou recebendo um erro na :setvarlinha

Incorrect syntax near ':'.

o que estou perdendo ?

sql-server-2008 visual-studio-2012
  • 1 respostas
  • 1053 Views
Martin Hope
Muflix
Asked: 2016-05-17 02:37:50 +0800 CST

posicionamento de texto para lista de seleção

  • 0

Tenho o seguinte problema, tenho uma tabela de hierarquia onde cada registro tem nível, código e descrição e preciso ter uma descrição para ver como é uma coluna.

código de exemplo

CREATE TABLE #tmp (Value NVARCHAR(255))
INSERT INTO #tmp (Value) VALUES ('L1 [ABC]'),('    L2 [DEFGH]'),('        L3 [E]')

SELECT 
Value + SPACE(50 - DATALENGTH(Value)) + 'Description text'
FROM #tmp

Resultado

insira a descrição da imagem aqui

Mas preciso ter uma descrição para começar na linha vermelha para cada registro de hierarquia. Qualquer ideia ?

sql-server-2008
  • 2 respostas
  • 37 Views
Martin Hope
Muflix
Asked: 2016-05-05 06:00:20 +0800 CST

Como verificar se o intervalo entre dois números está disponível na tabela de intervalos

  • 0

Eu tenho a seguinte tabela de intervalos de números

Create table Ranges {
  Id int identity(1,1) primary key,
  RangeFrom int not null,
  RangeTo int not null
}

Insert into Ranges(RangeFrom, RangeTo) VALUES (1,4)
Insert into Ranges(RangeFrom, RangeTo) VALUES (5,9)
Insert into Ranges(RangeFrom, RangeTo) VALUES (10,14)
-- here is free space (15 - 19)
Insert into Ranges(RangeFrom, RangeTo) VALUES (20,24)

E eu quero inserir um novo registro por exemplo

Insert into Ranges(RangeFrom, RangeTo) VALUES (15,19) -- Ok
Insert into Ranges(RangeFrom, RangeTo) VALUES (15,30) -- Fail

A questão é que antes da inserção preciso verificar se os números entre o intervalo na instrução de inserção já não são usados ​​em nenhum outro intervalo da tabela.

Qualquer ideia ?

sql-server-2008
  • 3 respostas
  • 9543 Views
Martin Hope
Muflix
Asked: 2016-02-20 05:15:54 +0800 CST

O procedimento CLR com parâmetro XML retorna Os dados no nível raiz são inválidos. Linha 1, posição 1

  • 3

Eu tenho o seguinte procedimento armazenado CLR, que está lançando erro neste comando

xmlDoc.LoadXml(inputXml);

código

    public static int spGetTaxOfficeXML(SqlXml _inputXml)
    {
        // this procedure rename Row elements name with NodeName attribute value
        string inputXml = _inputXml.ToString();
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(inputXml);

// procedure Logic

        SqlContext.Pipe.Send(inputXml);
        return 0;
    }

funciona bem, quando o texto XML está dentro da variável dentro do visual studio como um texto. Mas quando carrego o código no servidor SQL como CLR e tento executá-lo no SQL Management Studio:

DECLARE @XML XML
SET @XML = '<NodeA><NodeB></NodeB><NodeC AttributeX=""><Row NodeName="RowA" AttributeA="" AttributeB="abcd" AttributeC="efgh" /><Row NodeName="RowB" AttributeA="wxyz" /><Row NodeName="RowC" AttributeB="qwer" AttributeC="tyui" /><Row NodeName="RowD" AttributeA="stuv" AttributeB="erty" AttributeC="fghj" /></NodeC></NodeA>'

EXEC dbo.spGetTaxOfficeXML @XML

então este erro é lançado:

Msg 6522, Level 16, State 1, Procedure spGetTaxOfficeXML, Line 0
A .NET Framework error occurred during execution of user-defined routine or aggregate "spGetTaxOfficeXML": 
System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.
System.Xml.XmlException: 
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.LoadXml(String xml)
   at StoredProcedures.spGetTaxOfficeXML(String inputXml)

Tentei resolver o erro com o código a seguir, porque pensei que o byte utf8 poderia causar o erro, mas não ajudou.

// if byte mark exception happens
    string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
    if (inputXml.StartsWith(_byteOrderMarkUtf8))
    {
        inputXml = inputXml.Remove(0, _byteOrderMarkUtf8.Length);
    }

O que há de errado aqui?

sql-server sql-server-2008
  • 1 respostas
  • 1836 Views
Martin Hope
Muflix
Asked: 2016-02-13 03:32:56 +0800 CST

Consultar XML sem namespace

  • 3

Posso consultar XML, que definiu a tag xmlns com expressão de tabela comum

DECLARE @XML XML

SET @XML = 
'<NodeA xmlns="https://XYZ.xsd">
<NodeB verzePis="">
    <NodeC1 attrA="Hello" />
    <NodeC2 attrA="World" />
  </NodeB>
</NodeA>
'

;WITH XMLNAMESPACES(DEFAULT 'https://XYZ.xsd')

    SELECT
        r.value('fn:local-name(.)', 'nvarchar(50)') as SectionName,
        r.value('@attrA','NVARCHAR(250)') attrA
    FROM    @XML.nodes('/NodeA/NodeB/*') AS t(r);

Mas e se o XML de origem não contiver nenhuma tag xmlns? Como posso solucionar o namespace ausente?

sql-server sql-server-2008-r2
  • 1 respostas
  • 5011 Views
Martin Hope
Muflix
Asked: 2016-02-06 02:59:33 +0800 CST

Como alterar a porta padrão do T-SQL Debugger

  • 5

A porta padrão do T-SQL Debugger é 135, é possível alterar esta porta? Na minha empresa esta porta está na lista especial de portas proibidas, portanto precisamos abrir esse serviço em outro número de porta.

Estou acompanhando este artigo:

Transact-SQL Debugger para SQL Server 2008 – Parte 2 por Bill Ramos

sql-server sql-server-2008-r2
  • 1 respostas
  • 320 Views
Martin Hope
Muflix
Asked: 2015-07-04 04:22:47 +0800 CST

O usuário com falha no pacote SSIS simples não existe ou não tem permissão

  • 1
  • Eu criei e construí o pacote SSIS com "Tarefa de transferência de objetos do SQL Server".
  • Copiei o package.dtsx para a pasta de rede com permissões definidas para todos.
  • Eu criei o SSIS Job onde defini o caminho para esse pacote.
  • Também sou proprietário do banco de dados de origem e destino.
  • Pacote executado como 32b.

Mas Jó está falhando. O que pode estar errado? Por que está procurando minhas credenciais COMPANY\MYUSERNAME quando o trabalho é executado como COMPANY\SERVICEJOBACCOUNT? (que também tem acesso aos bancos de dados). obrigada

Erro está seguindo

Execution failed with the following error: 
"ERROR : errorCode=0 description=Cannot find the user 'COMPANY\MYUSERNAME', 
because it does not exist or you do not have permission.
sql-server-2008-r2 ssis
  • 1 respostas
  • 442 Views
Martin Hope
Muflix
Asked: 2015-06-16 01:35:54 +0800 CST

Mover objetos de banco de dados para outro banco de dados sem assistente

  • 3

Tenho vários bancos de dados em produção e também tenho ambiente de teste. Não tenho permissão para fazer operações de backup e restauração. Na verdade, estou usando o assistente para gerar scripts (esquema + dados) e executar o sql em outro banco de dados. Existe uma maneira de fazer isso via script (SQL, PowerShell, C#, etc.)? Posso mover todos os objetos de banco de dados da produção para testar com um clique idealmente, é possível que o script seja universal e o parâmetro de entrada seja o nome do banco de dados, por exemplo? Os problemas com os scripts gerados são dois => SQL pode ser muito grande para abrir no gerenciador sql e também é demorado executar o assistente sempre, porque preciso de dados de produção com frequência.

A visão final baseada nesse script ou trabalho universal é que eu tenho um painel da web, onde posso clicar no banco de dados ou ter um conjunto de scripts de shell de comando e o banco de dados será replicado para o ambiente de teste onde posso modificar os dados.

Qualquer ideia ?

sql-server-2008-r2 copy
  • 2 respostas
  • 2041 Views
Martin Hope
Muflix
Asked: 2015-04-09 12:12:49 +0800 CST

CROSS APPLY na função escalar

  • 8

Eu tenho isto:

SELECT
A
,B
,dbo.Func(C)
,dbo.Func(D)
,dbo.Func(E)
,F
FROM abcdef
WHERE
0 = dbo.Func(C) + dbo.Func(D)

Eu li que isso não é uma boa prática porque a função é chamada milhões de vezes e tem um impacto ruim no desempenho.

Tentei reescrever com CROSS APPLY:

SELECT *
 FROM abcdef
  CROSS APPLY dbo.Func(D) as FD

mas retorna esse erro:

Invalid object name 'dbo.Func'

Posso usar CROSS APPLY apenas em funções TABLE VALUED?

E o CROSS APPLY é adequado para funções escalares (convertidas em função com valor de tabela)? Porque no meu pequeno teste de desempenho, o CROSS APPLY é um pouco mais lento.

sql-server cross-apply
  • 2 respostas
  • 16473 Views
Martin Hope
Muflix
Asked: 2015-01-17 05:13:00 +0800 CST

Remova a string após o segundo caractere específico ocorrer da esquerda

  • 11

Eu tenho esse tipo de valores na coluna da tabela

154646@8@486
45465@6464@654

etc.

Como posso remover tudo após o segundo caractere @? eu preciso exibir

154646@8
45465@6464

Eu posso fazer isso apenas para todos os @, mas não para o segundo

SELECT REPLACE(LEFT('45@Tra@lala', CHARINDEX('@','45@Tra@lala')-1),'_',' ')

retorna 45 mas não 45@Tra

Obrigada :-)

sql-server
  • 1 respostas
  • 50570 Views
Martin Hope
Muflix
Asked: 2014-11-18 08:36:58 +0800 CST

Mesclando linhas quase únicas juntas

  • 1

eu tenho essa mesa

insira a descrição da imagem aqui

E eu preciso ter isso (na tabela de origem estão milhares de valores)

insira a descrição da imagem aqui

Como eu posso fazer isso ?

Aqui está o banco de dados de exemplo: http://sqlfiddle.com/#!3/4278d

Obrigada.

sql-server
  • 1 respostas
  • 59 Views
Martin Hope
Muflix
Asked: 2014-11-17 01:31:57 +0800 CST

Colunas em linhas e linhas em colunas

  • 0

Eu preciso fazer essa transformação de mesa, mas é um pouco difícil para mim.

Eu tenho uma mesa original que se parece com isso

insira a descrição da imagem aqui

e eu preciso transformar a tabela nisso

insira a descrição da imagem aqui

Como eu posso fazer isso ?

Aqui eu preparei banco de dados de exemplo http://sqlfiddle.com/#!3/0f324

Obrigado por ajudar.

sql-server sql-server-2008-r2
  • 1 respostas
  • 67 Views
Martin Hope
Muflix
Asked: 2014-11-13 06:59:46 +0800 CST

Caso com várias condições

  • 26

Eu preciso alterar o valor retornado, da instrução select, com base em várias condições. Eu tentei algo assim:

,CASE i.DocValue
  WHEN 'F2' AND c.CondCode IN ('ZPR0','ZT10','Z305') THEN c.CondVal
  ELSE 0
END as Value

por que não está funcionando e qual é a maneira recomendada de fazer isso? Haverá várias próximas condições WHEN.

obrigada

sql-server
  • 2 respostas
  • 472364 Views
Martin Hope
Muflix
Asked: 2014-10-10 06:39:11 +0800 CST

Selecionar filhos da hierarquia (/a/b/c/d/)

  • 0

Tenho que selecionar do banco de dados que não criei e estou com este problema:

esquema de exemplo:

Unit
----
id
HierarchyPath (example: '/42/48/63/84/')
UnitName (example1: "John" example2: "Team1")
typeId

UnitType
--------
id
Name (example1: "Name", example2: "TeamName")

eu preciso ter resultado como

Team1, John
Team1, Joe
Team1, Johana
Team2, Bob
Team2, Bobek
Team2, BobaFett

Eu tentei juntar tabelas como

UnitName_Teams.HierarchyPath = left(4,UnitName_Players.HierarchyPath)

mas trava no erro

'Conversion failed when converting the varchar value '/42/48/63/' to data type int.'

Como posso obter filhos neste 'tipo de dados' hierárquico? Posso selecionar jogadores de um time com, por exemplo,

Like '/42/%'

Mas como fazer para todas as Equipes?!

sql-server
  • 1 respostas
  • 117 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve