标签: table-variable

带有区分大小写列的T-SQL表变量 - 整理SQL_Latin1_General_CP1_CS_AS

是否可以在表变量列的定义中整理SQL_Latin1_General_CP1_CS_AS?

我想这样做的原因是因为我在我的源表的情况下敏感信息,但是当我在表变量插入它有一个与主键(这是群集)的问题 - 检测重复值 - 像"所有"和所有'.

这就是为什么我试图找到一种方法使表变量列区分大小写,如下面的语句:

SELECT SERVERPROPERTY ('Collation')
Run Code Online (Sandbox Code Playgroud)

给我:"SQL_Latin1_General_CP1_CI_AS"

t-sql sql-server table-variable collate

4
推荐指数
1
解决办法
8816
查看次数

如果表变量只有其批次的范围,那么为什么使用GO后我可以从其中选择一个呢?

我显然误解了批处理和会话之间的区别。我相信三件事不能同时为真:

  1. 众所周知,表变量仅具有其批次的范围。
  2. 我相信文档报告是正确的,这GO 标志着一批的结束
  3. 以下脚本不会引发错误,即使@t应该超出范围
declare @t table (id int)
insert into @t values (1)
select * from @t
GO
select * from @t
Run Code Online (Sandbox Code Playgroud)

数据库小提琴链接

显然我弄错了一些事情,但是什么?

t-sql sql-server table-variable

3
推荐指数
1
解决办法
88
查看次数

在存储过程中使用表变量而不仅仅是从表或视图中选择?

我现在正在看sprocs似乎遵循下面演示的行为

DECLARE @tablevar TABLE
(
    FIELD1   int,
    FIELD2   int,
    FIELD3   varchar(50),
    -- etc
)

INSERT INTO @tablevar
(
    FIELD1,
    FIELD2,
    FIELD3,
    -- etc
)
SELECT FIELD1, FIELD2, FIELD3, -- etc
FROM
TableA Inner Join TableB on TableA.Foo = TableB.Foo
Inner Join TableC on TableB.Bar = TableC.Bar
-- Where, Order By, etc.

Select FIELD1, FIELD2, FIELD3, -- etc
FROM @tablevar
Run Code Online (Sandbox Code Playgroud)

使用这种方法有什么好处,而不是使用普通的select语句并跳过表变量?

sql-server stored-procedures table-variable

2
推荐指数
1
解决办法
855
查看次数

在T-SQL中,如何在子查询中引用表变量?

我已经声明了一个表变量'@t',并正确执行了'INSERT-INTO-SELECT'.当我试图通过对每组行编号进行一些额外计算来查询表变量时,我在使用'@t'直接使用"必须声明变量"或使用'@t'的别名时出现"无效对象名称"错误".请提出建议.

SELECT 
    *,
    (SELECT COUNT(*) FROM "LTV" "COUNTER"
     WHERE 
        "COUNTER"."Collateral_ID" = "LTV"."Collateral_ID"
        AND
        "COUNTER"."m_il_no" = "LTV"."m_il_no"
        AND
        "COUNTER"."Ref_Key" <= "LTV"."Ref_Key"
     GROUP BY "COUNTER"."Collateral_ID", "COUNTER"."m_il_no"
    ) "MIL_IDX"

FROM @t AS LTV
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2000 table-variable

2
推荐指数
1
解决办法
2889
查看次数

使用表变量上的主键来提高搜索性能

我在我的SP中使用了这个表变量:

DECLARE @t TABLE(ID uniqueidentifier)
Run Code Online (Sandbox Code Playgroud)

然后我插入一些数据(我稍后使用):

INSERT INTO @t(ID)
SELECT ID FROM Categories WHERE ...
Run Code Online (Sandbox Code Playgroud)

而后来我有几个SELECTUPDATE基于@tID的,例如:

SELECT * FROM Categories A INNER JOIN @t T ON A.ID = T.ID

etc..
Run Code Online (Sandbox Code Playgroud)

我应该声明ID uniqueidentifier PRIMARY KEY增加SELECT/ UPDATEstatements中的持久性吗?如果是,它应该是群集还是非群集?我的建议选项是什么?

编辑:数据库中的所有表都有uniqueidentifier(ID)列作为主键NONCLUSTERED

EDIT2:奇怪(或没有)当我尝试使用PRIMARY KEY NONCLUSTERED表变量时,当使用连接的SELECT时,我在执行计划中看到有一个Table Scanon @t.但是当我省略时NONCLUSTERED有一个Clustered Index Scan.

sql-server primary-key table-variable

2
推荐指数
1
解决办法
1705
查看次数

为什么我不能在T-SQL函数中的表变量上运行INSERT EXEC?

我的功能看起来像这样:

CREATE FUNCTION fn_FileSys_DirExists(@dirName AS nvarchar(260))
RETURNS bit
AS
BEGIN
    DECLARE @dirExists int
    DECLARE @fileResults TABLE
    (
        file_exists int,
        file_is_a_directory int,
        parent_directory_exists int
    )

    INSERT @fileResults (file_exists, file_is_a_directory, parent_directory_exists)
    EXEC master.dbo.xp_fileexist @dirName

    SELECT @dirExists = file_is_a_directory FROM @fileResults
    RETURN @dirExists
END
Run Code Online (Sandbox Code Playgroud)

当我尝试执行上面的SQL时,我收到以下错误:

在函数中无效使用副作用运算符'INSERT EXEC'.

我认为函数中的表变量的操作不被视为副作用操作?

t-sql sql-server sql-function table-variable sql-server-2012

2
推荐指数
1
解决办法
1409
查看次数

如何在 SQL Server 中的 UPDATE 查询的子查询中引用表变量

我在存储过程中有一个 UPDATE 查询,其中我需要更新一个已经由一些数据填充的表变量。这个查询,如下面的代码,由于在子查询中引用了表变量,即在子查询中@daysPerEmail.ProductId被引用而给出错误。我尝试为表变量使用别名,如 in UPDATE @daysPerEmail d SET LastEmailDate...,但它没有帮助。

问题:如何重写查询以便在子查询中正确引用 ProductId 的表变量列?

UPDATE @daysPerEmail SET LastEmailDate = (SELECT max(ActionDate) FROM 
        useractionsreport  WHERE ProductId = @daysPerEmail.ProductId 
       and ActionTypeId = @userActionTypeId );
Run Code Online (Sandbox Code Playgroud)

更新 1

为了在 SSMS 中重现这一点,我使用以下查询。SSMS 给出一个错误说Must declare the scalar variable "@daysPerEmail".

DECLARE @daysPerEmail TABLE (
    VendorId INT,
    DaysPerEmail SMALLINT,
    LastEmailDate DATE,
    ProductId INT 
)

INSERT INTO @daysPerEmail (VendorId, DaysPerEmail, LastEmailDate, ProductId)
    VALUES (10, 5, NULL, 11), (12, 3, NULL, 15), (14, 1, NULL, 22);

UPDATE …
Run Code Online (Sandbox Code Playgroud)

sql-server table-variable sql-update sql-server-2014

1
推荐指数
1
解决办法
4712
查看次数

如何在python中使用sqlalchemy在查询中创建sql server表变量

我正在尝试在 SQL Server 中创建一个表变量,查询它,并将结果返回到一个 Pandas 数据框(参见示例)。我想这样做,以便我可以在将数据发送到 Pandas 数据帧之前聚合数据库中的数据。我记得设置NOCOUNT ON将允许它工作,因为它在执行每个查询时不会返回任何内容。但这不起作用。所以这显然是一个示例代码,但我已经能够在这里重新创建错误。按照建议的链接为您提供ProgrammingErrors. 我没有发现它很有帮助。

import urllib
import sqlalchemy
import pandas as pd

quoted = urllib.parse.quote_plus('DRIVER={ODBC Driver 17 for SQL Server};Server=127.0.0.1;Database=mydb;UID=myuser;PWD=mypasswd;Port=1433;')
engine = sqlalchemy.create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted))

query = """
SET NOCOUNT ON;

DECLARE @n_majors TABLE (id varchar(9), n_majors int)

INSERT INTO @n_majors
SELECT m.student_id_fk
, COUNT(DISTINCT dc.category) AS [N majors declared]
FROM msu_db.dbo.Majors AS m
JOIN department_categories AS dc
ON dc.dept_name = m.dept_name
WHERE m.Student_Level_Code = 'UN'
GROUP BY m.student_id_fk

DECLARE @grad_category …
Run Code Online (Sandbox Code Playgroud)

python sql-server table-variable pandas

1
推荐指数
1
解决办法
1429
查看次数

无法在桌面上调用方法?表变量

我试图将外部应用放在表变量上,但我收到如下错误

无法在表上调用方法.

我有Split功能,将字符串拆分为一定长度

CREATE FUNCTION Split(@String varchar(MAX), @SplitLength int) 
RETURNS @Result TABLE (Splited varchar(MAX))
AS
BEGIN

Declare @Cnt int
    Set @Cnt = FLOOR((len(@String)/@SplitLength));

   While @Cnt!=0
    Begin
     SET @Cnt=@Cnt-1;
        While len(@String)>@SplitLength 
        Begin

         INSERT INTO @Result  VALUES (SUBSTRING(@String,1,@SplitLength))

         SET @String=SUBSTRING(@String,@SplitLength+1,len(@String)-@SplitLength) 

        End     

    End

RETURN
END
Run Code Online (Sandbox Code Playgroud)

我与表变量连接,其中包含要分割字符串的列

    DECLARE @LeftSuper TABLE
(
KeyTerm VARCHAR(MAX),
Data VARCHAR(MAX) ,

)
Run Code Online (Sandbox Code Playgroud)

查询如下,哪个生成错误(无法调用表上的方法)

 select KeyTerm ,D.Splited from @LeftSuper
 outer apply [Split](@LeftSuper.Data,300) as D
Run Code Online (Sandbox Code Playgroud)

注意:代码适用于db中的Real Table.

sql sql-server table-variable table-valued-parameters

0
推荐指数
1
解决办法
3721
查看次数

声明并设置具有多个可能值的变量

是否可以将变量设置为具有多个值?

在下面的示例中,我想设置@variable和使用商店号码1,4,7和12

然后在WHERE声明中使用变量.

以下是纯粹的例子,看看这是否可行

Declare @Variable INT;

Set @Variable = IN(1,4,7,12)

Select *
From dbo.EUactivestores eu
Where eu.[Store No] = @Variable
Run Code Online (Sandbox Code Playgroud)

如果这是可能的,或类似的东西的任何建议将是伟大的.

我相信它可以帮助我创建一个更动态的查询

t-sql sql-server variables declare table-variable

0
推荐指数
1
解决办法
1664
查看次数